<?php

if (!defined('IN_TG')) {
    exit('Access decline');
}

/**
 * 链接mysql数据库类，本类连接了IP源库
 * 使用方式：$dbconn = new DbMyIP();   $result = $dbconn->sql_fetch_assoc("SELECT....");
 */

// 建立对象类
class DbMyIP
{
    private $dbHost = "localhost"; //定义默认连接方式
    private $dbUser = "root"; //定义默认用户名
    private $dbPwd = "dreamren"; //定义默认的密码
    private $dbName = "dream_resource_ip_library"; //定义默认的数据库名
    private $conn;

    //构造方法，用来初始化数据，链接数据库
    public function __construct()
    {
        $this->con_mysql();
    }

    /**
     * 连接数据库资句柄
     */
    private function con_mysql()
    {
        //造一个连接对象，参数是上面的那四个
        @$this->conn = new mysqli($this->dbHost, $this->dbUser, $this->dbPwd, $this->dbName, 3306);
        if (mysqli_connect_errno()) {
            echo 'database open fail: ' . mysqli_connect_error();
            exit();
        }
        $this->conn->set_charset('utf8');
        //echo 'success';
    }

    /**
     * sql_fetch_assoc 返回SQL语句的结果集，并从中取得一行作为关联数组
     * @param string $sql sql语句
     * @return array 查询成功后返回mysqli_result对象(结果集)，在结果集中取得一行作为关联数组
     */
    public function sql_fetch_assoc($sql)
    {
        // 判断SQL语句为空就终止程序
        if (empty($sql)) {
            exit('SQL语句不能为空');
        }
        if (!$result = $this->conn->query($sql)) {
            echo 'SQL语句出错 ' . $this->conn->errno;
            // echo $this->conn->error;
            exit;
        }
        if ($this->conn->errno > 0) {
            echo 'SQL语句出错 ' . $this->conn->errno;
            // echo $this->conn->error;
            exit;
        }
        return $result->fetch_assoc();
    }


    /**
     * dbClose 关闭先前打开的数据库连接
     * @return boolean 关闭成功时返回 true，失败时返回 false。
     */
    public function dbClose()
    {
        $result = $this->conn->close();
        if (!$result) {
            echo '关闭异常';
        }
        return $result;
    }

    
    // /**
    //  * getQuery 返回SQL语句的结果集
    //  * @param string $sql sql语句
    //  * @return object 查询成功后返回mysqli_result对象(结果集)，可以使用$dbconn->res_fetch_assoc($result)取得一行作为关联数组
    //  */
    // private function getQuery($sql)
    // {
    //     // 判断SQL语句为空就终止程序
    //     if (empty($sql)) {
    //         exit('SQL语句不能为空');
    //     }
    //     // 失败时返回 false
    //     // 通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象
    //     // 其他查询(insert|delete|update等)则返回 true。
    //     $result = $this->conn->query($sql);
    //     if ($this->conn->errno > 0) {
    //         echo 'SQL语句出错 ' . $this->conn->errno;
    //         // echo $this->conn->error;
    //         exit;
    //     }
    //     // SELECT返回一个mysqli_result对象
    //     return $result;
    // }

    // /**
    //  * sql_query 返回SQL语句的结果集
    //  * @param string $sql sql语句
    //  * @return object 查询成功后返回mysqli_result对象(结果集)，可以使用$dbconn->res_fetch_assoc($result)取得一行作为关联数组
    //  */
    // public function sql_query($sql)
    // {
    //     return $this->getQuery($sql);
    // }

    // /**
    //  * sql_fetch_row 返回SQL语句的结果集，并从中取得一行作为枚举数组
    //  * @param string $sql sql语句
    //  * @return array 查询成功后返回mysqli_result对象(结果集)，在结果集中取得一行作为枚举数组
    //  */
    // public function sql_fetch_row($sql)
    // {
    //     $result = $this->getQuery($sql);
    //     return $result->fetch_row();
    // }


    // /**
    //  * sql_fetch_array 返回SQL语句的结果集，并从中取得一行作为关联数组
    //  * @param string $sql sql语句
    //  * @return array 查询成功后返回mysqli_result对象(结果集)，在结果集中取得一行作为关联数组
    //  */
    // public function sql_fetch_array($sql)
    // {
    //     $result = $this->getQuery($sql);
    //     return $result->fetch_array();
        
    // }

    // /**
    //  * sql_fetch_all 返回SQL语句的结果集，取得所有行作为一个数组
    //  * @param string $sql sql语句
    //  * @return array 查询成功后返回mysqli_result对象(结果集)，在结果集中所有行作为一个数组
    //  */
    // public function sql_fetch_all($sql)
    // {
    //     $result = $this->getQuery($sql);
    //     return $result->fetch_all(MYSQLI_ASSOC); //查询语句，返回数组.执行sql的返回方式是all，也可以换成row
        
    // }

    // /**
    //  * sql_num_rows 返回SQL语句的结果集，并返回SQL结果集行数
    //  * @param string $sql sql语句
    //  * @return int 查询成功后，返回结果mysqli_result对象(集行数)，在取得结果集行数
    //  */
    // public function sql_num_rows($sql)
    // {
    //     $result = $this->getQuery($sql);
    //     // 失败时返回 false
    //     // 通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象
    //     // 其他查询(insert|delete|update等)则返回 true。
    //     if ($result) {
    //         $num = $result->num_rows;
    //         return $num;
    //     } else {
    //         return 0;
    //     }
        
    // }

    // /**
    //  * sql_affected_rows 执行(添加|修改|删除)SQL语句，并返回结果集影响的行数
    //  * @param string $sql insert|update|delete 语句
    //  * @return int (添加|修改|删除)执行成功后，并返回影响的行数
    //  */
    // public function sql_affected_rows($sql)
    // {
    //     $result = $this->getQuery($sql);
    //     // 失败时返回 false
    //     // 通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象
    //     // 其他查询(insert|delete|update等)则返回 true。
    //     if ($result == true) {
    //         $num = $this->conn->affected_rows;
    //         if ($num >= 1) {
    //             return $num;
    //         } else {
    //             return $num;
    //         }
    //     } else {
    //         return false;
    //     }
    // }

    // /**
    //  * res_fetch_assoc 从传入的结果集中，取得一行作为关联数组
    //  * @param mixed $result 传入的结果集
    //  * @return array 从传入的结果集中，取得行作为关联数组
    //  */
    // public function res_fetch_assoc($result)
    // {
    //     if (!$result) {
    //         exit('结果集出错');
    //     }
    //     return $result->fetch_assoc();
    // }

    // /**
    //  * res_num_rows 从传入的结果集中，取得结果集行数
    //  * @param mixed $result 传入的结果集
    //  * @return int 从传入的结果集行数
    //  */
    // public function res_num_rows($result)
    // {
    //     if (!$result) {
    //         exit('结果集出错');
    //     }
    //     return $result->num_rows;
    // }


    // /**
    //  * insertArr 以表所有字段名建立的数组，转换为INSERT语句，写入表中一行新的数据
    //  * @param array $arrayList 使用表所有字段名建立的数组。
    //  * @param string $dbTableName 要插入数据的表名
    //  * @return array 返回包含3元素的数组，arr[0]:影响的条数，arr[1]:添加的id，arr[3]:返回的文字信息
    //  */
    // public function insertArr($arrayList, $dbTableName, $isshowsql = 0)
    // {
    //     // 判断传入如果不是数组就终止程序。
    //     if (!is_array($arrayList)) {
    //         return array(0, 0, 'Illegal data submitted');
    //         // return '提交数据不合法';
    //     }
    //     // 判断表名为空就终止程序。
    //     if (empty($dbTableName)) {
    //         return array(0, 0, 'Illegal table name');
    //         // return '非法表名';
    //     }
    //     $table_key_str = ""; // 循环读出数组中的键名（数据表字段名: name,age,gender）
    //     $add_val_str = ""; // 循环读出数组中的键值（'dream',30,'男'）
    //     // 使用escapeSqlStr在数组中循环使用real_escape_string()转义在 SQL 语句中使用的字符串中的特殊字符。
    //     $arrayList = $this->escapeSqlStr($arrayList);
    //     // 获取数组中的键名，建立一个新数组
    //     $field_arr = array_keys($arrayList);
    //     // 获取数组中的键值，建立一个新数组
    //     $_cont_arr = array_values($arrayList);
    //     // 循环数组键名以逗号分割（生成insert语句VALUES前面的表字段名）
    //     foreach ($field_arr as $_key) {
    //         $table_key_str .= $_key . ", ";
    //     }
    //     // 循环数组键值以逗号分割（生成insert语句VALUES后面的表字段值）
    //     foreach ($_cont_arr as $_value) {
    //         if (!is_numeric($_value)) {
    //             $add_val_str .= "'" . $_value . "', ";
    //         } else {
    //             $add_val_str .= $_value . ", ";
    //         }
    //     }
    //     // 删除表字段名循环时的最后一个逗号
    //     $table_key_str = substr(trim($table_key_str), 0, -1);
    //     // 删除表字段值循环时的最后一个逗号
    //     $add_val_str = substr(trim($add_val_str), 0, -1);
    //     // 拼接成insert SQL语句
    //     $sql_str = "INSERT INTO " . $dbTableName . " ( " . $table_key_str . " ) VALUES ( " . $add_val_str . " )";
    //     if ($isshowsql) {
    //         echo $sql_str;
    //     }
    //     // 使用mysqli的query()对数据库执行一次查询
    //     $result = $this->getQuery($sql_str);
    //     // 失败时返回 false
    //     // 通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象
    //     // 其他查询(insert|delete|update等)则返回 true。
    //     if ($result == true) {
    //         // 获取添加成功影响的行数
    //         $aff_num = $this->conn->affected_rows;
    //         // 获取添加成功最新的id
    //         $newID = $this->conn->insert_id;
    //         if ($aff_num >= 1) {
    //             // 如果影响的行数大于0，就表示添加成功了
    //             return array($aff_num, $newID, 'Added successfu');
    //         } else {
    //             // 没有记录被添加
    //             return array(0, 0, 'No records added');
    //         }
    //     } else {
    //         // 如果$result 没有返回true，就说明添加失败了。（字段名不对，或字段值不符合等）
    //         return array(0, 0, 'Add failed');
    //     }
    // }

    // /**
    //  * upWhereArr 以指定表字段名建立的数组，转换为UPDATE语句，修改表中符合where条件的数据行
    //  * @param array $arrayList 使用表所有字段名建立的数组。
    //  * @param string $dbTableName 要插入数据的表名
    //  * @parma string $sqlWhere 执行UPDATE语句必须要指定的where条件
    //  * @return array 返回包含2元素的数组，arr[0]:影响的条数，arr[1]:返回的文字信息
    //  */
    // public function upWhereArr($arrayList, $dbTableName, $sqlWhere, $isshowsql=0)
    // {
    //     // 判断传入如果不是数组就终止程序。
    //     if (!is_array($arrayList)) {
    //         return array(0, 'Illegal data submitted');
    //         // return '提交数据不合法';
    //     }
    //     // 判断表名为空就终止程序。
    //     if (empty($dbTableName)) {
    //         return array(0, 0, 'Illegal table name');
    //         // return '非法表名';
    //     }
    //     // 判断where条件为空就终止程序。
    //     if (empty($sqlWhere)) {
    //         return array(0, 0, 'Illegal where');
    //         // return 'where条件不能空间';
    //     }
    //     $mod_val_str = ""; // 对要修改的数据值，字符串加上单引号，数值不加单引号（20 | 'dream'）
    //     $_set_val =""; // key=value的字符串（ age=20, name='dream' ）
    //     // 使用escapeSqlStr在数组中循环使用real_escape_string()转义在 SQL 语句中使用的字符串中的特殊字符。
    //     $arrayList = $this->escapeSqlStr($arrayList);
    //     foreach ($arrayList as $_key => $_value) {
    //         // 对更新的值，字符串加上单引号，数值不加单引号（20 | 'dream'）
    //         if (!is_numeric($_value)) {
    //             $mod_val_str = "'" . $_value . "', ";
    //         } else {
    //             $mod_val_str = $_value . ", ";
    //         }
    //         // 将字段名=字段值
    //         $_set_val .= $_key . ' = ' . $mod_val_str;
    //     }
    //     // 删除循环的最后一个逗号
    //     $_set_val = substr(trim($_set_val), 0, -1);
    //     // 拼接成UPDATE SET WHERE 格式的SQL语句
    //     $sql_str = "UPDATE " . $dbTableName . " SET " . $_set_val . " WHERE " . $sqlWhere . " ";
    //     if ($isshowsql) {
    //         echo $sql_str;
    //     }
    //     // 使用mysqli的query()对数据库执行一次查询
    //     $result = $this->getQuery($sql_str);
    //     // 失败时返回 false
    //     // 通过mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象
    //     // 其他查询(insert|delete|update等)则返回 true。
    //     if ($result == true) {
    //         // 获取更新成功影响的行数
    //         $aff_num = $this->conn->affected_rows;
    //         if ($aff_num >= 1) {
    //             // 如果影响的行数大于0，就表示更新成功了
    //             return array($aff_num, 'modifyed successfu');
    //         } else {
    //             // 没有记录被更新
    //             return array(0, 'No records modifyed');
    //         }
    //     } else {
    //         // 更新失败
    //         return array(0, 'modify failed');
    //     }
    // }


    // /**
    //  * escapeSqlStr 对字符串或数组使用real_escape_string()转义在 SQL 语句中使用的字符串中的特殊字符
    //  * @param string|array $str 要转义在SQL中使用的字符串或数组
    //  * @return string|array 转义后在SQL中使用的字符串或数组
    //  */
    // public function escapeSqlStr($str)
    // {
    //     // 如果是数组就循环数组并转义
    //     if (is_array($str)) {
    //         foreach ($str as $_key => $_value) {
    //             //采用递归方式，执行函数自己
    //             $str[$_key] = $this->escapeSqlStr($_value);
    //         }
    //     } else {
    //         // 如果是字符串，执行real_escape_string来转义在SQL中使用的字符串
    //         //$str = mysqli_real_escape_string($this->conn, $str);
    //         $str = $this->conn->real_escape_string($str);
    //     }
    //     return $str;
    // }

    
}


?>